home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / ftp_traversal.nasl < prev    next >
Text File  |  2005-01-14  |  4KB  |  155 lines

  1. #
  2. # This script was written by Renaud Deraison <deraison@cvs.nessus.org>
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6. #
  7. # This is a generic test which checks for FTP traversal vulns.
  8. #
  9. # Misc. references:
  10. # Date: Tue, 12 Nov 2002 17:58:06 +0200
  11. # From: "Tamer Sahin" <ts@securityoffice.net>
  12. # To: vulnwatch@vulnwatch.org
  13. # Subject: Hyperion Ftp Server v2.8.1 Directory Traversal Vulnerability
  14. #
  15. # Date: Sat, 18 Jan 2003 14:56:59 +0100
  16. # From: matrix@infowarfare.dk
  17. # To: "news@securiteam.com" <news@securiteam.com>, 
  18. #   "vulnwatch@vulnwatch.org" <vulnwatch@vulnwatch.org>
  19. # Subject: Multible vulnerabilities found in Shambala Server version 4.5
  20. #
  21. # Date: Tue, 21 Jan 2003 21:06:07 +0100
  22. # From: matrix@infowarfare.dk
  23. # Subject: Directory Traversal vulnerability found in Enceladus Server Suite version 3.9
  24. #
  25. # Date: Mon, 27 Jan 2003 08:01:52 +0100
  26. # From: matrix@infowarfare.dk
  27. # Subject: Multiple vulnerabilities found in PlatinumFTPserver V1.0.7
  28. #
  29.  
  30.  desc = string("
  31. The remote FTP server allows any anonymous user to browse the 
  32. entire remote disk by issuing commands like :
  33.  
  34.     LIST ../../../../../
  35.     LIST ..\\..\\..\\..\\..
  36.  
  37. Solution : Contact your vendor for a patch
  38. Risk factor : High");
  39.  
  40.  
  41.  
  42. if(description)
  43. {
  44.  script_id(11112);
  45.  script_bugtraq_id(2618, 2786, 5168, 11159);
  46.  script_cve_id("CVE-2001-0680", "CAN-2001-1335", "CAN-2001-0582");
  47.  script_version ("$Revision: 1.21 $");
  48.  
  49.  name["english"] = "Generic FTP traversal";
  50.  
  51.  script_name(english:name["english"]);
  52.  script_description(english:desc);
  53.  
  54.  summary["english"] = "Attempts to get the listing of the remote root dir";
  55.  script_summary(english:summary["english"]);
  56.  
  57.  script_category(ACT_GATHER_INFO);
  58.  
  59.  
  60.  script_copyright(english:"This script is Copyright (C) 2002 Renaud Deraison",
  61.         francais:"Ce script est Copyright (C) 2002 Renaud Deraison");
  62.  family["english"] = "FTP";
  63.  family["francais"] = "FTP";
  64.  script_family(english:family["english"], francais:family["francais"]);
  65.  script_dependencie("find_service.nes", "ftp_anonymous.nasl");
  66.  script_require_keys("ftp/login");
  67.  script_exclude_keys("ftp/ncftpd", "ftp/msftpd");
  68.  script_require_ports("Services/ftp", 21);
  69.  exit(0);
  70. }
  71.  
  72.  
  73. function dir(loc, soc)
  74. {
  75.  local_var p;
  76.  p = ftp_get_pasv_port(socket:soc);
  77.  if(!p)exit(0);
  78.  soc2 = open_sock_tcp(p, transport:get_port_transport(port));
  79.  if(!soc2)return;
  80.  
  81.  #display("Ok\n");
  82.  ls = strcat("LIST ", loc, '\r\n');
  83.  send(socket:soc, data:ls);
  84.  r = recv_line(socket:soc, length:4096);
  85.  if(ereg(pattern:"^150 ", string:r))
  86.  {
  87.   result = ftp_recv_listing(socket:soc2);
  88.   close(soc2);
  89.   r = ftp_recv_line(socket:soc);
  90.   return(result);
  91.  }
  92.  close(soc2);
  93.  return;
  94. }
  95.  
  96.  
  97. #
  98. # The script code starts here
  99. #
  100.  
  101. include("ftp_func.inc");
  102.  
  103. port = get_kb_item("Services/ftp");
  104. if(!port)port = 21;
  105. if(!get_port_state(port))exit(0);
  106. soc = open_sock_tcp(port);
  107. if(soc)
  108. {
  109.  if(ftp_log_in(socket:soc, user:"anonymous", pass:string("nessus@", get_host_name())))
  110.  {
  111.   l1 = dir(loc: "/", soc: soc);    # previous version used "/"
  112.   if (isnull(l1))
  113.     l1 = dir(loc: "/", soc: soc);
  114.   if (isnull(l1))
  115.      {
  116.     ftp_close(socket: soc);
  117.       exit(0);
  118.      } 
  119.   patterns = 
  120.    make_list(    "../../../../../../../", 
  121.         "..\..\..\..\..\..\..\",
  122.         "..%5c..%5c..%5c..%5c..%5c..%5c..%5c",
  123.         "\..\..\..\..\..\",    # platinum FTP 1.0.7
  124.         "...",
  125.         "/...",
  126.         "/......",
  127.         "\...",
  128.         "...\",
  129.         "..../",
  130.         "\",
  131.         "/");
  132.   foreach pat (patterns)
  133.   {
  134.     l2 = dir(loc: pat, soc: soc);
  135.     
  136.     # ncftpd workaround
  137.     if (strlen(l2) &&
  138.         ! match(string: l2, pattern: "*permission denied*", icase: TRUE) &&
  139.         ! match(string: l2, pattern: "*no such file or directory*", icase: TRUE) &&
  140.     ! match(string: l2, pattern: "*total 0*", icase: TRUE) &&
  141.         l1 != l2)
  142.   {
  143.        #display(l1, "\n****\n"); display(l2, "\n");
  144.        report = string(desc, "\n\n", "The command we found to escape the chrooted environment is : ", pat, "\nThe root dir of the remote server contains :\n", l2);
  145.       security_hole(port:port, data:report);
  146.        ftp_close(socket: soc);
  147.       exit(0);
  148.   }     
  149.       
  150.   }     
  151.  }
  152.   ftp_close(socket: soc);
  153. }
  154.  
  155.